/**
 * 
 */
package gwtool.gui.dataSetView;

import gwtool.container.DataSetItem;
import gwtool.container.Geprueft;
import gwtool.container.GeraetItem;
import gwtool.container.InlinePruefung;
import gwtool.container.OnlinePruefungItem;
import gwtool.container.PruefungAnzeigen;
import gwtool.gui.MainController;
import gwtool.gui.components.ChangeSupport;
import gwtool.gui.components.ComboBoxWithChangeSupport;
import gwtool.gui.components.FormattedTextFieldWithMenu;
import gwtool.gui.components.JTextAreaWithMenu;
import gwtool.gui.components.JTextFieldWithMenu;
import gwtool.gui.components.JXDatePickerWithChangeSupport;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;

import org.jdesktop.swingx.JXDatePicker;

/**
 * @author Christian
 * 
 */
public class DataSetGereatPanel extends JPanel implements DataSetView, ActionListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = 8010979209173231177L;

	private JButton btnSpeichern;

	private JButton btnSchlieen;

	private JLabel lblBezeichner;

	private JLabel lblType;

	private JLabel lblInventarnummer;

	private JLabel lblHersteller;

	private JLabel lblLieferant;

	private JLabel lblAblageort;

	private JLabel lblMenge;

	private JLabel lblGre;

	private JLabel lblPreis;

	private JLabel lblAusgegebenAn;

	private JLabel lblBeschafftAm;

	private JLabel lblHergestelltAm;

	private JLabel lblAusgemustertAm;

	private JLabel lblAusgegebenAm;

	private JLabel lblDurchgefhrtePrfungen;

	private JLabel lblNchstePrfung;

	private JLabel lblErforderlichePrfungen;

	private JList<Geprueft> durchgefuehrteList;

	private JTextFieldWithMenu bezeichnerTextField;

	private JTextFieldWithMenu tpyeTextField;

	private JTextFieldWithMenu herstellerTextField;

	private JTextFieldWithMenu mengeTextField;

	private FormattedTextFieldWithMenu preisTextField;

	private JTextFieldWithMenu ausgegebenAnTextField;

	private JTextFieldWithMenu inventarnummerTextField;

	private JTextFieldWithMenu lieferantTextField;

	private JTextFieldWithMenu groesseTextField;

	private JTextFieldWithMenu ablageortTextField;

	private JXDatePickerWithChangeSupport ausgemustertabDatePicker;

	private JXDatePickerWithChangeSupport hergestelltamDatePicker;

	private JXDatePickerWithChangeSupport beschaffedDatePicker;

	private JXDatePickerWithChangeSupport ausgegebenDatePicker;

	private JButton btnPrfungEintragen;

	private JLabel label;

	private JLabel lblPrfungsAnzeigeLabel;

	private DataSetViewController dataSetViewController;

	private List<ChangeSupport> compList = new ArrayList<>();

	private JLabel lblKommentar;

	private JPanel panel;

	private JPanel panel_1;

	private JButton btnKopieErstellen;

	private JList<InlinePruefung> erforderLichePruefungen;

	private JTextAreaWithMenu textKommentarArea;

	private JScrollPane scrollPane;

	private JPanel panel_2;

	private JButton btnAddErforderlich;

	private JButton btnEditErforderlich;

	private JButton btnRemoveErforderlich;

	private JPanel panel_3;

	private JButton btnAddGesprueft;

	private JButton btnEditGesprueft;

	private JButton btnRemoveGerueft;

	private boolean changesFlag = false;

	private GeraetItem item;

	private JLabel lblSchreibrechte;

	private JPanel panel_5;

	private JLabel lblStatus;

	private ComboBoxWithChangeSupport einsatzStatusComboBox;

	private JScrollPane scrollPane_1;

	private JScrollPane scrollPane_2;

	private JButton btnDrucken;

	public DataSetGereatPanel(DataSetViewController dataSetViewController, GeraetItem item, boolean zeigeButtons) {

		this.dataSetViewController = dataSetViewController;
		this.item = item;
		initialize();
		updateListModels();
		getLblPrfungsAnzeigeLabel().setText(item.getNaestePruefungen().toString());
		getBezeichnerTextField().setText(item.getBezeichner());
		getInventarnummerTextField().setText(item.getInventarnummer());
		getTypeTextField().setText(item.getGeraeteType());
		getHerstellerTextField().setText(item.getHersteller());
		getLieferantTextField().setText(item.getLieferant());
		getAblageortTextField().setText(item.getAblageOrt());
		getMengeTextField().setText(item.getMenge());
		getGroesseTextField().setText(item.getGroesse());
		getAusgegebenAnTextField().setText(item.getAusgegebenAn());
		getPreisTextField().setText(item.getPreis() + "");
		getKommentarTextArea().setText(item.getKommentar());
		getEinsatzStatusComboBox().setPreSelectedItem(item.getStatus());
		if (item.getBeschafftAm() != 0) {
			getBeschaffedDatePicker().setDate(new Date(item.getBeschafftAm()));
		}
		if (item.getHergestelltAm() != 0) {
			getHergestelltamDatePicker().setDate(new Date(item.getHergestelltAm()));
		}
		if (item.getAusgegebenAm() != 0) {
			getAusgegebenDatePicker().setDate(new Date(item.getAusgegebenAm()));
		}
		if (item.getAusgemustertAm() != 0) {
			getAusgemustertDatePicker().setDate(new Date(item.getAusgemustertAm()));
		}
		boolean erlaubt = dataSetViewController.isAendernErlaubt();
		if (!erlaubt) {
			for (ChangeSupport c : compList) {
				c.setEditable(erlaubt);
			}
			getBtnKopieErstellen().setEnabled(false);
			getBtnSpeichern().setEnabled(false);
			getEinsatzStatusComboBox().setEditable(false);
			getEinsatzStatusComboBox().setEnabled(false);
			getBtnAddErforderlich().setEnabled(false);
			getBtnAddGeprueft().setEnabled(false);
			getBtnEditErforderlich().setEnabled(false);
			getBtnEditGesprueft().setEnabled(false);
			getBtnPrfungEintragen().setEnabled(false);
			getBtnRemoveErforderlich().setEnabled(false);
			getBtnRemoveGerueft().setEnabled(false);
			getLblSchreibrechte().setVisible(true);
		}
		if (!zeigeButtons) {
			getBtnKopieErstellen().setVisible(false);
			getBtnSpeichern().setVisible(false);
			getBtnSchlieen().setVisible(false);
		}
	}

	private void initialize() {

		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[] { 0, 160, 0, 161, 0 };
		gridBagLayout.rowHeights = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, 30, 0, 0, 80, 0, 0 };
		gridBagLayout.columnWeights = new double[] { 1.0, 1.0, 0.0, 1.0, Double.MIN_VALUE };
		gridBagLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0,
				Double.MIN_VALUE };
		setLayout(gridBagLayout);
		GridBagConstraints gbc_lblSchreibrechte = new GridBagConstraints();
		gbc_lblSchreibrechte.insets = new Insets(0, 0, 5, 5);
		gbc_lblSchreibrechte.gridx = 1;
		gbc_lblSchreibrechte.gridy = 0;
		add(getLblSchreibrechte(), gbc_lblSchreibrechte);
		GridBagConstraints gbc_lblBezeichner = new GridBagConstraints();
		gbc_lblBezeichner.anchor = GridBagConstraints.EAST;
		gbc_lblBezeichner.insets = new Insets(0, 0, 5, 5);
		gbc_lblBezeichner.gridx = 0;
		gbc_lblBezeichner.gridy = 1;
		add(getLblBezeichner(), gbc_lblBezeichner);
		GridBagConstraints gbc_bezeichnerTextField = new GridBagConstraints();
		gbc_bezeichnerTextField.gridwidth = 2;
		gbc_bezeichnerTextField.insets = new Insets(0, 0, 5, 5);
		gbc_bezeichnerTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_bezeichnerTextField.gridx = 1;
		gbc_bezeichnerTextField.gridy = 1;
		add(getBezeichnerTextField(), gbc_bezeichnerTextField);
		GridBagConstraints gbc_lblType = new GridBagConstraints();
		gbc_lblType.anchor = GridBagConstraints.EAST;
		gbc_lblType.insets = new Insets(0, 0, 5, 5);
		gbc_lblType.gridx = 0;
		gbc_lblType.gridy = 2;
		add(getLblType(), gbc_lblType);
		GridBagConstraints gbc_tpyeTextField = new GridBagConstraints();
		gbc_tpyeTextField.insets = new Insets(0, 0, 5, 5);
		gbc_tpyeTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_tpyeTextField.gridx = 1;
		gbc_tpyeTextField.gridy = 2;
		add(getTypeTextField(), gbc_tpyeTextField);
		GridBagConstraints gbc_lblInventarnummer = new GridBagConstraints();
		gbc_lblInventarnummer.anchor = GridBagConstraints.EAST;
		gbc_lblInventarnummer.insets = new Insets(0, 0, 5, 5);
		gbc_lblInventarnummer.gridx = 2;
		gbc_lblInventarnummer.gridy = 2;
		add(getLblInventarnummer(), gbc_lblInventarnummer);
		GridBagConstraints gbc_inventarnummerTextField = new GridBagConstraints();
		gbc_inventarnummerTextField.insets = new Insets(0, 0, 5, 0);
		gbc_inventarnummerTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_inventarnummerTextField.gridx = 3;
		gbc_inventarnummerTextField.gridy = 2;
		add(getInventarnummerTextField(), gbc_inventarnummerTextField);
		GridBagConstraints gbc_lblHersteller = new GridBagConstraints();
		gbc_lblHersteller.anchor = GridBagConstraints.EAST;
		gbc_lblHersteller.insets = new Insets(0, 0, 5, 5);
		gbc_lblHersteller.gridx = 0;
		gbc_lblHersteller.gridy = 3;
		add(getLblHersteller(), gbc_lblHersteller);
		GridBagConstraints gbc_herstellerTextField = new GridBagConstraints();
		gbc_herstellerTextField.insets = new Insets(0, 0, 5, 5);
		gbc_herstellerTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_herstellerTextField.gridx = 1;
		gbc_herstellerTextField.gridy = 3;
		add(getHerstellerTextField(), gbc_herstellerTextField);
		GridBagConstraints gbc_lblLieferant = new GridBagConstraints();
		gbc_lblLieferant.anchor = GridBagConstraints.EAST;
		gbc_lblLieferant.insets = new Insets(0, 0, 5, 5);
		gbc_lblLieferant.gridx = 2;
		gbc_lblLieferant.gridy = 3;
		add(getLblLieferant(), gbc_lblLieferant);
		GridBagConstraints gbc_lieferantTextField = new GridBagConstraints();
		gbc_lieferantTextField.insets = new Insets(0, 0, 5, 0);
		gbc_lieferantTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_lieferantTextField.gridx = 3;
		gbc_lieferantTextField.gridy = 3;
		add(getLieferantTextField(), gbc_lieferantTextField);
		GridBagConstraints gbc_lblMenge = new GridBagConstraints();
		gbc_lblMenge.anchor = GridBagConstraints.EAST;
		gbc_lblMenge.insets = new Insets(0, 0, 5, 5);
		gbc_lblMenge.gridx = 0;
		gbc_lblMenge.gridy = 4;
		add(getLblMenge(), gbc_lblMenge);
		GridBagConstraints gbc_mengeTextField = new GridBagConstraints();
		gbc_mengeTextField.insets = new Insets(0, 0, 5, 5);
		gbc_mengeTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_mengeTextField.gridx = 1;
		gbc_mengeTextField.gridy = 4;
		add(getMengeTextField(), gbc_mengeTextField);
		GridBagConstraints gbc_lblGre = new GridBagConstraints();
		gbc_lblGre.anchor = GridBagConstraints.EAST;
		gbc_lblGre.insets = new Insets(0, 0, 5, 5);
		gbc_lblGre.gridx = 2;
		gbc_lblGre.gridy = 4;
		add(getLblGre(), gbc_lblGre);
		GridBagConstraints gbc_groesseTextField = new GridBagConstraints();
		gbc_groesseTextField.insets = new Insets(0, 0, 5, 0);
		gbc_groesseTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_groesseTextField.gridx = 3;
		gbc_groesseTextField.gridy = 4;
		add(getGroesseTextField(), gbc_groesseTextField);
		GridBagConstraints gbc_lblPreis = new GridBagConstraints();
		gbc_lblPreis.anchor = GridBagConstraints.EAST;
		gbc_lblPreis.insets = new Insets(0, 0, 5, 5);
		gbc_lblPreis.gridx = 0;
		gbc_lblPreis.gridy = 5;
		add(getLblPreis(), gbc_lblPreis);
		GridBagConstraints gbc_preisTextField = new GridBagConstraints();
		gbc_preisTextField.insets = new Insets(0, 0, 5, 5);
		gbc_preisTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_preisTextField.gridx = 1;
		gbc_preisTextField.gridy = 5;
		add(getPreisTextField(), gbc_preisTextField);
		GridBagConstraints gbc_lblAblageort = new GridBagConstraints();
		gbc_lblAblageort.anchor = GridBagConstraints.EAST;
		gbc_lblAblageort.insets = new Insets(0, 0, 5, 5);
		gbc_lblAblageort.gridx = 2;
		gbc_lblAblageort.gridy = 5;
		add(getLblAblageort(), gbc_lblAblageort);
		GridBagConstraints gbc_ablageortTextField = new GridBagConstraints();
		gbc_ablageortTextField.insets = new Insets(0, 0, 5, 0);
		gbc_ablageortTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_ablageortTextField.gridx = 3;
		gbc_ablageortTextField.gridy = 5;
		add(getAblageortTextField(), gbc_ablageortTextField);
		GridBagConstraints gbc_lblAusgegebenAn = new GridBagConstraints();
		gbc_lblAusgegebenAn.anchor = GridBagConstraints.EAST;
		gbc_lblAusgegebenAn.insets = new Insets(0, 0, 5, 5);
		gbc_lblAusgegebenAn.gridx = 0;
		gbc_lblAusgegebenAn.gridy = 6;
		add(getLblAusgegebenAn(), gbc_lblAusgegebenAn);
		GridBagConstraints gbc_ausgegebenAnTextField = new GridBagConstraints();
		gbc_ausgegebenAnTextField.insets = new Insets(0, 0, 5, 5);
		gbc_ausgegebenAnTextField.fill = GridBagConstraints.HORIZONTAL;
		gbc_ausgegebenAnTextField.gridx = 1;
		gbc_ausgegebenAnTextField.gridy = 6;
		add(getAusgegebenAnTextField(), gbc_ausgegebenAnTextField);
		GridBagConstraints gbc_lblAusgegebenAm = new GridBagConstraints();
		gbc_lblAusgegebenAm.anchor = GridBagConstraints.EAST;
		gbc_lblAusgegebenAm.insets = new Insets(0, 0, 5, 5);
		gbc_lblAusgegebenAm.gridx = 2;
		gbc_lblAusgegebenAm.gridy = 6;
		add(getLblAusgegebenAm(), gbc_lblAusgegebenAm);
		GridBagConstraints gbc_ausgegebenDatePicker = new GridBagConstraints();
		gbc_ausgegebenDatePicker.insets = new Insets(0, 0, 5, 0);
		gbc_ausgegebenDatePicker.fill = GridBagConstraints.HORIZONTAL;
		gbc_ausgegebenDatePicker.gridx = 3;
		gbc_ausgegebenDatePicker.gridy = 6;
		add(getAusgegebenDatePicker(), gbc_ausgegebenDatePicker);
		GridBagConstraints gbc_lblBeschafftAm = new GridBagConstraints();
		gbc_lblBeschafftAm.anchor = GridBagConstraints.EAST;
		gbc_lblBeschafftAm.insets = new Insets(0, 0, 5, 5);
		gbc_lblBeschafftAm.gridx = 0;
		gbc_lblBeschafftAm.gridy = 7;
		add(getLblBeschafftAm(), gbc_lblBeschafftAm);
		GridBagConstraints gbc_beschaffedDatePicker = new GridBagConstraints();
		gbc_beschaffedDatePicker.fill = GridBagConstraints.HORIZONTAL;
		gbc_beschaffedDatePicker.insets = new Insets(0, 0, 5, 5);
		gbc_beschaffedDatePicker.gridx = 1;
		gbc_beschaffedDatePicker.gridy = 7;
		add(getBeschaffedDatePicker(), gbc_beschaffedDatePicker);
		GridBagConstraints gbc_lblHergestelltAm = new GridBagConstraints();
		gbc_lblHergestelltAm.anchor = GridBagConstraints.EAST;
		gbc_lblHergestelltAm.insets = new Insets(0, 0, 5, 5);
		gbc_lblHergestelltAm.gridx = 2;
		gbc_lblHergestelltAm.gridy = 7;
		add(getLblHergestelltAm(), gbc_lblHergestelltAm);
		GridBagConstraints gbc_hergestelltamDatePicker = new GridBagConstraints();
		gbc_hergestelltamDatePicker.insets = new Insets(0, 0, 5, 0);
		gbc_hergestelltamDatePicker.fill = GridBagConstraints.HORIZONTAL;
		gbc_hergestelltamDatePicker.gridx = 3;
		gbc_hergestelltamDatePicker.gridy = 7;
		add(getHergestelltamDatePicker(), gbc_hergestelltamDatePicker);
		GridBagConstraints gbc_lblAusgemustertAm = new GridBagConstraints();
		gbc_lblAusgemustertAm.anchor = GridBagConstraints.EAST;
		gbc_lblAusgemustertAm.insets = new Insets(0, 0, 5, 5);
		gbc_lblAusgemustertAm.gridx = 0;
		gbc_lblAusgemustertAm.gridy = 8;
		add(getLblAusgemustertAm(), gbc_lblAusgemustertAm);
		GridBagConstraints gbc_ausgemustertabDatePicker = new GridBagConstraints();
		gbc_ausgemustertabDatePicker.insets = new Insets(0, 0, 5, 5);
		gbc_ausgemustertabDatePicker.fill = GridBagConstraints.HORIZONTAL;
		gbc_ausgemustertabDatePicker.gridx = 1;
		gbc_ausgemustertabDatePicker.gridy = 8;
		add(getAusgemustertDatePicker(), gbc_ausgemustertabDatePicker);
		GridBagConstraints gbc_lblStatus = new GridBagConstraints();
		gbc_lblStatus.anchor = GridBagConstraints.EAST;
		gbc_lblStatus.insets = new Insets(0, 0, 5, 5);
		gbc_lblStatus.gridx = 2;
		gbc_lblStatus.gridy = 8;
		add(getLblStatus(), gbc_lblStatus);
		GridBagConstraints gbc_einsatzStatusComboBox = new GridBagConstraints();
		gbc_einsatzStatusComboBox.insets = new Insets(0, 0, 5, 0);
		gbc_einsatzStatusComboBox.fill = GridBagConstraints.HORIZONTAL;
		gbc_einsatzStatusComboBox.gridx = 3;
		gbc_einsatzStatusComboBox.gridy = 8;
		add(getEinsatzStatusComboBox(), gbc_einsatzStatusComboBox);
		GridBagConstraints gbc_label = new GridBagConstraints();
		gbc_label.insets = new Insets(0, 0, 5, 5);
		gbc_label.gridx = 1;
		gbc_label.gridy = 9;
		add(getLabel(), gbc_label);
		GridBagConstraints gbc_lblNchstePrfung = new GridBagConstraints();
		gbc_lblNchstePrfung.insets = new Insets(0, 0, 5, 5);
		gbc_lblNchstePrfung.gridx = 0;
		gbc_lblNchstePrfung.gridy = 10;
		add(getLblNchstePrfung(), gbc_lblNchstePrfung);
		GridBagConstraints gbc_lblPrfungsAnzeigeLabel = new GridBagConstraints();
		gbc_lblPrfungsAnzeigeLabel.insets = new Insets(0, 0, 5, 5);
		gbc_lblPrfungsAnzeigeLabel.gridx = 1;
		gbc_lblPrfungsAnzeigeLabel.gridy = 10;
		add(getLblPrfungsAnzeigeLabel(), gbc_lblPrfungsAnzeigeLabel);
		GridBagConstraints gbc_btnPrfungEintragen = new GridBagConstraints();
		gbc_btnPrfungEintragen.gridwidth = 2;
		gbc_btnPrfungEintragen.insets = new Insets(0, 0, 5, 0);
		gbc_btnPrfungEintragen.gridx = 2;
		gbc_btnPrfungEintragen.gridy = 10;
		add(getBtnPrfungEintragen(), gbc_btnPrfungEintragen);
		GridBagConstraints gbc_lblDurchgefhrtePrfungen = new GridBagConstraints();
		gbc_lblDurchgefhrtePrfungen.insets = new Insets(0, 0, 5, 5);
		gbc_lblDurchgefhrtePrfungen.gridx = 0;
		gbc_lblDurchgefhrtePrfungen.gridy = 11;
		add(getLblDurchgefhrtePrfungen(), gbc_lblDurchgefhrtePrfungen);
		GridBagConstraints gbc_panel_1 = new GridBagConstraints();
		gbc_panel_1.gridwidth = 3;
		gbc_panel_1.insets = new Insets(0, 0, 5, 0);
		gbc_panel_1.fill = GridBagConstraints.BOTH;
		gbc_panel_1.gridx = 1;
		gbc_panel_1.gridy = 11;
		add(getPanel_1(), gbc_panel_1);
		GridBagConstraints gbc_lblErforderlichePrfungen = new GridBagConstraints();
		gbc_lblErforderlichePrfungen.insets = new Insets(0, 0, 5, 5);
		gbc_lblErforderlichePrfungen.gridx = 0;
		gbc_lblErforderlichePrfungen.gridy = 12;
		add(getLblErforderlichePrfungen(), gbc_lblErforderlichePrfungen);
		GridBagConstraints gbc_panel = new GridBagConstraints();
		gbc_panel.gridwidth = 3;
		gbc_panel.insets = new Insets(0, 0, 5, 0);
		gbc_panel.fill = GridBagConstraints.BOTH;
		gbc_panel.gridx = 1;
		gbc_panel.gridy = 12;
		add(getPanel(), gbc_panel);
		GridBagConstraints gbc_lblKommentar = new GridBagConstraints();
		gbc_lblKommentar.fill = GridBagConstraints.VERTICAL;
		gbc_lblKommentar.insets = new Insets(0, 0, 5, 5);
		gbc_lblKommentar.gridx = 0;
		gbc_lblKommentar.gridy = 13;
		add(getLblKommentar(), gbc_lblKommentar);
		GridBagConstraints gbc_scrollPane = new GridBagConstraints();
		gbc_scrollPane.fill = GridBagConstraints.BOTH;
		gbc_scrollPane.gridwidth = 3;
		gbc_scrollPane.insets = new Insets(0, 0, 5, 0);
		gbc_scrollPane.gridx = 1;
		gbc_scrollPane.gridy = 13;
		add(getScrollPane(), gbc_scrollPane);
		GridBagConstraints gbc_panel_5 = new GridBagConstraints();
		gbc_panel_5.gridwidth = 4;
		gbc_panel_5.fill = GridBagConstraints.BOTH;
		gbc_panel_5.gridx = 0;
		gbc_panel_5.gridy = 14;
		add(getPanel_5(), gbc_panel_5);
		compList.add(getBezeichnerTextField());
		compList.add(getInventarnummerTextField());
		compList.add(getTypeTextField());
		compList.add(getHerstellerTextField());
		compList.add(getLieferantTextField());
		compList.add(getAblageortTextField());
		compList.add(getMengeTextField());
		compList.add(getGroesseTextField());
		compList.add(getPreisTextField());
		compList.add(getAusgegebenAnTextField());
		compList.add(getBeschaffedDatePicker());
		compList.add(getHergestelltamDatePicker());
		compList.add(getAusgegebenDatePicker());
		compList.add(getAusgemustertDatePicker());
		compList.add(getKommentarTextArea());
		compList.add(getEinsatzStatusComboBox());
	}

	@Override
	public boolean hasChanges() {

		if (changesFlag) {
			return true;
		}
		for (ChangeSupport c : compList) {
			if (c.hasChanged()) {
				return true;
			}
		}
		return false;
	}

	@Override
	public DataSetItem getDataFromGui() {

		GeraetItem item = new GeraetItem();
		item.setBezeichner(getBezeichnerTextField().getText());
		item.setInventarnummer(getInventarnummerTextField().getText());
		item.setHersteller(getHerstellerTextField().getText());
		item.setGeraeteType(getTypeTextField().getText());
		item.setLieferant(getLieferantTextField().getText());
		item.setAblageOrt(getAblageortTextField().getText());
		item.setMenge(getMengeTextField().getText());
		item.setGroesse(getGroesseTextField().getText());
		item.setAusgegebenAn(getAusgegebenAnTextField().getText());
		item.setPreis(Double.parseDouble(getPreisTextField().getText()));
		item.setInventarnummer(getInventarnummerTextField().getText());
		item.setKommentar(getKommentarTextArea().getText());
		item.setStatus(getEinsatzStatusComboBox().getSelectedItem().toString());
		if (getBeschaffedDatePicker().getDate() != null) {
			item.setBeschafftAm(getBeschaffedDatePicker().getDate().getTime());
		}
		if (getHergestelltamDatePicker().getDate() != null) {
			item.setHergestelltAm(getHergestelltamDatePicker().getDate().getTime());
		}
		if (getAusgegebenDatePicker().getDate() != null) {
			item.setAusgegebenAm(getAusgegebenDatePicker().getDate().getTime());
		}
		if (getAusgemustertDatePicker().getDate() != null) {
			item.setAusgemustertAm(getAusgemustertDatePicker().getDate().getTime());
		}
		// eforderliche
		List<InlinePruefung> erforderlichePruefungenList = new ArrayList<>();
		for (int i = 0; i < getErforderLichePruefungen().getModel().getSize(); i++) {
			erforderlichePruefungenList.add(getErforderLichePruefungen().getModel().getElementAt(i).clone());
		}
		item.setNoetigePruefungen(erforderlichePruefungenList);
		// durchgeführte
		List<Geprueft> durchgefuehrtPruefungenList = new ArrayList<>();
		for (int i = 0; i < getDurchgefuehrteList().getModel().getSize(); i++) {
			durchgefuehrtPruefungenList.add(getDurchgefuehrteList().getModel().getElementAt(i).clone());
		}
		item.setDurchgefuehrtePruefungen(durchgefuehrtPruefungenList);
		return item;
	}

	@Override
	public JPanel getJPanel() {

		return this;
	}

	@Override
	public JButton getBtnSpeichern() {

		if (btnSpeichern == null) {
			btnSpeichern = new JButton("Speichern");
			btnSpeichern.addActionListener(dataSetViewController);
		}
		return btnSpeichern;
	}

	@Override
	public JButton getBtnSchlieen() {

		if (btnSchlieen == null) {
			btnSchlieen = new JButton("Schlie\u00DFen");
			btnSchlieen.addActionListener(dataSetViewController);
		}
		return btnSchlieen;
	}

	private JLabel getLblBezeichner() {

		if (lblBezeichner == null) {
			lblBezeichner = new JLabel("Bezeichner");
		}
		return lblBezeichner;
	}

	private JLabel getLblType() {

		if (lblType == null) {
			lblType = new JLabel("Typ");
		}
		return lblType;
	}

	private JLabel getLblInventarnummer() {

		if (lblInventarnummer == null) {
			lblInventarnummer = new JLabel("Inventarnummer");
		}
		return lblInventarnummer;
	}

	private JLabel getLblHersteller() {

		if (lblHersteller == null) {
			lblHersteller = new JLabel("Hersteller");
		}
		return lblHersteller;
	}

	private JLabel getLblLieferant() {

		if (lblLieferant == null) {
			lblLieferant = new JLabel("Lieferant");
		}
		return lblLieferant;
	}

	private JLabel getLblAblageort() {

		if (lblAblageort == null) {
			lblAblageort = new JLabel("Ablageort");
		}
		return lblAblageort;
	}

	private JLabel getLblMenge() {

		if (lblMenge == null) {
			lblMenge = new JLabel("Menge");
		}
		return lblMenge;
	}

	private JLabel getLblGre() {

		if (lblGre == null) {
			lblGre = new JLabel("Gr\u00F6\u00DFe");
		}
		return lblGre;
	}

	private JLabel getLblPreis() {

		if (lblPreis == null) {
			lblPreis = new JLabel("Preis");
		}
		return lblPreis;
	}

	private JLabel getLblAusgegebenAn() {

		if (lblAusgegebenAn == null) {
			lblAusgegebenAn = new JLabel("Ausgegeben an");
		}
		return lblAusgegebenAn;
	}

	private JLabel getLblBeschafftAm() {

		if (lblBeschafftAm == null) {
			lblBeschafftAm = new JLabel("Beschafft am");
		}
		return lblBeschafftAm;
	}

	private JLabel getLblHergestelltAm() {

		if (lblHergestelltAm == null) {
			lblHergestelltAm = new JLabel("Hergestellt am");
		}
		return lblHergestelltAm;
	}

	private JLabel getLblAusgemustertAm() {

		if (lblAusgemustertAm == null) {
			lblAusgemustertAm = new JLabel("Ausgemustert am");
		}
		return lblAusgemustertAm;
	}

	private JLabel getLblAusgegebenAm() {

		if (lblAusgegebenAm == null) {
			lblAusgegebenAm = new JLabel("Ausgegeben am");
		}
		return lblAusgegebenAm;
	}

	private JLabel getLblDurchgefhrtePrfungen() {

		if (lblDurchgefhrtePrfungen == null) {
			lblDurchgefhrtePrfungen = new JLabel("<html>Durchgef\u00FChrte <br>Pr\u00FCfungen");
		}
		return lblDurchgefhrtePrfungen;
	}

	private JLabel getLblNchstePrfung() {

		if (lblNchstePrfung == null) {
			lblNchstePrfung = new JLabel("N\u00E4chste Pr\u00FCfung");
		}
		return lblNchstePrfung;
	}

	private JLabel getLblErforderlichePrfungen() {

		if (lblErforderlichePrfungen == null) {
			lblErforderlichePrfungen = new JLabel("<html>Erforderliche <br>Pr\u00FCfungen");
		}
		return lblErforderlichePrfungen;
	}

	private JList<Geprueft> getDurchgefuehrteList() {

		if (durchgefuehrteList == null) {
			durchgefuehrteList = new JList<Geprueft>();
			durchgefuehrteList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		}
		return durchgefuehrteList;
	}

	private JTextFieldWithMenu getBezeichnerTextField() {

		if (bezeichnerTextField == null) {
			bezeichnerTextField = new JTextFieldWithMenu();
			bezeichnerTextField.setColumns(10);
		}
		return bezeichnerTextField;
	}

	private JTextFieldWithMenu getTypeTextField() {

		if (tpyeTextField == null) {
			tpyeTextField = new JTextFieldWithMenu();
			tpyeTextField.setColumns(10);
		}
		return tpyeTextField;
	}

	private JTextFieldWithMenu getHerstellerTextField() {

		if (herstellerTextField == null) {
			herstellerTextField = new JTextFieldWithMenu();
			herstellerTextField.setColumns(10);
		}
		return herstellerTextField;
	}

	private JTextFieldWithMenu getMengeTextField() {

		if (mengeTextField == null) {
			mengeTextField = new JTextFieldWithMenu();
			mengeTextField.setColumns(10);
		}
		return mengeTextField;
	}

	private FormattedTextFieldWithMenu getPreisTextField() {

		if (preisTextField == null) {
			preisTextField = new FormattedTextFieldWithMenu();
			preisTextField.setColumns(10);
		}
		return preisTextField;
	}

	private JTextFieldWithMenu getAusgegebenAnTextField() {

		if (ausgegebenAnTextField == null) {
			ausgegebenAnTextField = new JTextFieldWithMenu();
			ausgegebenAnTextField.setColumns(10);
		}
		return ausgegebenAnTextField;
	}

	private JXDatePickerWithChangeSupport getAusgemustertDatePicker() {

		if (ausgemustertabDatePicker == null) {
			ausgemustertabDatePicker = new JXDatePickerWithChangeSupport();
			DateFormat fmt = new SimpleDateFormat("dd.MM.yyyy");
			ausgemustertabDatePicker.setFormats(fmt);
			ausgemustertabDatePicker.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {

				}
			});
		}
		return ausgemustertabDatePicker;
	}

	private JXDatePickerWithChangeSupport getAusgegebenDatePicker() {

		if (ausgegebenDatePicker == null) {
			ausgegebenDatePicker = new JXDatePickerWithChangeSupport();
			DateFormat fmt = new SimpleDateFormat("dd.MM.yyyy");
			ausgegebenDatePicker.setFormats(fmt);
			ausgegebenDatePicker.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {

				}
			});
		}
		return ausgegebenDatePicker;
	}

	private JXDatePickerWithChangeSupport getHergestelltamDatePicker() {

		if (hergestelltamDatePicker == null) {
			hergestelltamDatePicker = new JXDatePickerWithChangeSupport();
			DateFormat fmt = new SimpleDateFormat("dd.MM.yyyy");
			hergestelltamDatePicker.setFormats(fmt);
			hergestelltamDatePicker.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {

				}
			});
		}
		return hergestelltamDatePicker;
	}

	private JXDatePickerWithChangeSupport getBeschaffedDatePicker() {

		if (beschaffedDatePicker == null) {
			beschaffedDatePicker = new JXDatePickerWithChangeSupport();
			DateFormat fmt = new SimpleDateFormat("dd.MM.yyyy");
			beschaffedDatePicker.setFormats(fmt);
			beschaffedDatePicker.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {

				}
			});
		}
		return beschaffedDatePicker;
	}

	private JTextFieldWithMenu getInventarnummerTextField() {

		if (inventarnummerTextField == null) {
			inventarnummerTextField = new JTextFieldWithMenu();
			inventarnummerTextField.setColumns(10);
		}
		return inventarnummerTextField;
	}

	private JTextFieldWithMenu getLieferantTextField() {

		if (lieferantTextField == null) {
			lieferantTextField = new JTextFieldWithMenu();
			lieferantTextField.setColumns(10);
		}
		return lieferantTextField;
	}

	private JTextFieldWithMenu getGroesseTextField() {

		if (groesseTextField == null) {
			groesseTextField = new JTextFieldWithMenu();
			groesseTextField.setColumns(10);
		}
		return groesseTextField;
	}

	private JTextFieldWithMenu getAblageortTextField() {

		if (ablageortTextField == null) {
			ablageortTextField = new JTextFieldWithMenu();
			ablageortTextField.setColumns(10);
		}
		return ablageortTextField;
	}

	private JButton getBtnPrfungEintragen() {

		if (btnPrfungEintragen == null) {
			btnPrfungEintragen = new JButton("Pr\u00FCfung eintragen");
			btnPrfungEintragen.addActionListener(this);
		}
		return btnPrfungEintragen;
	}

	private JLabel getLabel() {

		if (label == null) {
			label = new JLabel("");
		}
		return label;
	}

	private JLabel getLblPrfungsAnzeigeLabel() {

		if (lblPrfungsAnzeigeLabel == null) {
			lblPrfungsAnzeigeLabel = new JLabel("Pr\u00FCfungslabel");
		}
		return lblPrfungsAnzeigeLabel;
	}

	private JLabel getLblKommentar() {

		if (lblKommentar == null) {
			lblKommentar = new JLabel("Kommentar");
		}
		return lblKommentar;
	}

	private JPanel getPanel() {

		if (panel == null) {
			panel = new JPanel();
			GridBagLayout gbl_panel = new GridBagLayout();
			gbl_panel.columnWidths = new int[] { 0, 51, 0 };
			gbl_panel.rowHeights = new int[] { 23, 0 };
			gbl_panel.columnWeights = new double[] { 1.0, 0.0, Double.MIN_VALUE };
			gbl_panel.rowWeights = new double[] { 1.0, Double.MIN_VALUE };
			panel.setLayout(gbl_panel);
			GridBagConstraints gbc_scrollPane_2 = new GridBagConstraints();
			gbc_scrollPane_2.fill = GridBagConstraints.BOTH;
			gbc_scrollPane_2.insets = new Insets(0, 0, 0, 5);
			gbc_scrollPane_2.gridx = 0;
			gbc_scrollPane_2.gridy = 0;
			panel.add(getScrollPane_2(), gbc_scrollPane_2);
			GridBagConstraints gbc_panel_2 = new GridBagConstraints();
			gbc_panel_2.fill = GridBagConstraints.HORIZONTAL;
			gbc_panel_2.gridx = 1;
			gbc_panel_2.gridy = 0;
			panel.add(getPanel_2(), gbc_panel_2);
		}
		return panel;
	}

	private JPanel getPanel_1() {

		if (panel_1 == null) {
			panel_1 = new JPanel();
			GridBagLayout gbl_panel_1 = new GridBagLayout();
			gbl_panel_1.columnWidths = new int[] { 0, 0, 0 };
			gbl_panel_1.rowHeights = new int[] { 0, 0 };
			gbl_panel_1.columnWeights = new double[] { 1.0, 0.0, Double.MIN_VALUE };
			gbl_panel_1.rowWeights = new double[] { 1.0, Double.MIN_VALUE };
			panel_1.setLayout(gbl_panel_1);
			GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();
			gbc_scrollPane_1.fill = GridBagConstraints.BOTH;
			gbc_scrollPane_1.insets = new Insets(0, 0, 0, 5);
			gbc_scrollPane_1.gridx = 0;
			gbc_scrollPane_1.gridy = 0;
			panel_1.add(getScrollPane_1(), gbc_scrollPane_1);
			GridBagConstraints gbc_panel_3 = new GridBagConstraints();
			gbc_panel_3.fill = GridBagConstraints.HORIZONTAL;
			gbc_panel_3.gridx = 1;
			gbc_panel_3.gridy = 0;
			panel_1.add(getPanel_3(), gbc_panel_3);
		}
		return panel_1;
	}

	@Override
	public JButton getBtnKopieErstellen() {

		if (btnKopieErstellen == null) {
			btnKopieErstellen = new JButton("Kopie erstellen");
			btnKopieErstellen.addActionListener(dataSetViewController);
		}
		return btnKopieErstellen;
	}

	private JList<InlinePruefung> getErforderLichePruefungen() {

		if (erforderLichePruefungen == null) {
			erforderLichePruefungen = new JList<InlinePruefung>();
			erforderLichePruefungen.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		}
		return erforderLichePruefungen;
	}

	public JTextAreaWithMenu getKommentarTextArea() {

		if (textKommentarArea == null) {
			textKommentarArea = new JTextAreaWithMenu();
			textKommentarArea.setLineWrap(true);
		}
		return textKommentarArea;
	}

	private JScrollPane getScrollPane() {

		if (scrollPane == null) {
			scrollPane = new JScrollPane();
			scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
			scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
			scrollPane.setViewportView(getKommentarTextArea());
		}
		return scrollPane;
	}

	private JPanel getPanel_2() {

		if (panel_2 == null) {
			panel_2 = new JPanel();
			GridBagLayout gbl_panel_2 = new GridBagLayout();
			gbl_panel_2.columnWidths = new int[] { 0, 0 };
			gbl_panel_2.rowHeights = new int[] { 0, 0, 0, 0 };
			gbl_panel_2.columnWeights = new double[] { 0.0, Double.MIN_VALUE };
			gbl_panel_2.rowWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE };
			panel_2.setLayout(gbl_panel_2);
			GridBagConstraints gbc_btnAddErforderlich = new GridBagConstraints();
			gbc_btnAddErforderlich.fill = GridBagConstraints.HORIZONTAL;
			gbc_btnAddErforderlich.insets = new Insets(0, 0, 5, 0);
			gbc_btnAddErforderlich.gridx = 0;
			gbc_btnAddErforderlich.gridy = 0;
			panel_2.add(getBtnAddErforderlich(), gbc_btnAddErforderlich);
			GridBagConstraints gbc_btnEditErforderlich = new GridBagConstraints();
			gbc_btnEditErforderlich.insets = new Insets(0, 0, 5, 0);
			gbc_btnEditErforderlich.gridx = 0;
			gbc_btnEditErforderlich.gridy = 1;
			panel_2.add(getBtnEditErforderlich(), gbc_btnEditErforderlich);
			GridBagConstraints gbc_btnRemoveErforderlich = new GridBagConstraints();
			gbc_btnRemoveErforderlich.fill = GridBagConstraints.HORIZONTAL;
			gbc_btnRemoveErforderlich.insets = new Insets(0, 0, 5, 0);
			gbc_btnRemoveErforderlich.gridx = 0;
			gbc_btnRemoveErforderlich.gridy = 2;
			panel_2.add(getBtnRemoveErforderlich(), gbc_btnRemoveErforderlich);
		}
		return panel_2;
	}

	private JButton getBtnAddErforderlich() {

		if (btnAddErforderlich == null) {
			btnAddErforderlich = new JButton("+");
			btnAddErforderlich.addActionListener(this);
		}
		return btnAddErforderlich;
	}

	private JButton getBtnEditErforderlich() {

		if (btnEditErforderlich == null) {
			btnEditErforderlich = new JButton("edit");
			btnEditErforderlich.addActionListener(this);
		}
		return btnEditErforderlich;
	}

	private JButton getBtnRemoveErforderlich() {

		if (btnRemoveErforderlich == null) {
			btnRemoveErforderlich = new JButton("-");
			btnRemoveErforderlich.addActionListener(this);
		}
		return btnRemoveErforderlich;
	}

	private JPanel getPanel_3() {

		if (panel_3 == null) {
			panel_3 = new JPanel();
			GridBagLayout gbl_panel_3 = new GridBagLayout();
			gbl_panel_3.columnWidths = new int[] { 0, 0 };
			gbl_panel_3.rowHeights = new int[] { 0, 0, 0, 0 };
			gbl_panel_3.columnWeights = new double[] { 0.0, Double.MIN_VALUE };
			gbl_panel_3.rowWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE };
			panel_3.setLayout(gbl_panel_3);
			GridBagConstraints gbc_btnAddGesprueft = new GridBagConstraints();
			gbc_btnAddGesprueft.fill = GridBagConstraints.HORIZONTAL;
			gbc_btnAddGesprueft.insets = new Insets(0, 0, 5, 0);
			gbc_btnAddGesprueft.gridx = 0;
			gbc_btnAddGesprueft.gridy = 0;
			panel_3.add(getBtnAddGeprueft(), gbc_btnAddGesprueft);
			GridBagConstraints gbc_btnEditGesprueft = new GridBagConstraints();
			gbc_btnEditGesprueft.insets = new Insets(0, 0, 5, 0);
			gbc_btnEditGesprueft.gridx = 0;
			gbc_btnEditGesprueft.gridy = 1;
			panel_3.add(getBtnEditGesprueft(), gbc_btnEditGesprueft);
			GridBagConstraints gbc_btnRemoveGerueft = new GridBagConstraints();
			gbc_btnRemoveGerueft.fill = GridBagConstraints.HORIZONTAL;
			gbc_btnRemoveGerueft.insets = new Insets(0, 0, 5, 0);
			gbc_btnRemoveGerueft.gridx = 0;
			gbc_btnRemoveGerueft.gridy = 2;
			panel_3.add(getBtnRemoveGerueft(), gbc_btnRemoveGerueft);
		}
		return panel_3;
	}

	private JButton getBtnAddGeprueft() {

		if (btnAddGesprueft == null) {
			btnAddGesprueft = new JButton("+");
			btnAddGesprueft.addActionListener(this);
		}
		return btnAddGesprueft;
	}

	private JButton getBtnEditGesprueft() {

		if (btnEditGesprueft == null) {
			btnEditGesprueft = new JButton("edit");
			btnEditGesprueft.addActionListener(this);
		}
		return btnEditGesprueft;
	}

	private JButton getBtnRemoveGerueft() {

		if (btnRemoveGerueft == null) {
			btnRemoveGerueft = new JButton("-");
			btnRemoveGerueft.addActionListener(this);
		}
		return btnRemoveGerueft;
	}

	@Override
	public void actionPerformed(ActionEvent e) {

		if (e.getSource() == getBtnPrfungEintragen()) {
			tragePruefungEin(item.getNaestePruefungen());
			updateListModels();
		}
		if (e.getSource() == getBtnAddGeprueft()) {
			tragePruefungEin(null);
			updateListModels();
		}
		if (e.getSource() == getBtnEditGesprueft()) {
			editEingetragenePruefunden();
			updateListModels();
		}
		if (e.getSource() == getBtnRemoveGerueft()) {
			item.getDurchgefuehrtePruefungen().remove(getDurchgefuehrteList().getSelectedValue());
			updateListModels();
		}
		if (e.getSource() == getBtnAddErforderlich()) {
			trageErforderlichePruefungEin();
			updateListModels();
		}
		if (e.getSource() == getBtnEditErforderlich()) {
			editiereErforderlichePruefung();
			updateListModels();
		}
		if (e.getSource() == getBtnRemoveErforderlich()) {
			item.getNoetigePruefungen().remove(getErforderLichePruefungen().getSelectedValue());
			updateListModels();
		}
	}

	private void updateListModels() {

		DefaultListModel<InlinePruefung> model = new DefaultListModel<>();
		for (InlinePruefung p : item.getNoetigePruefungen()) {
			model.addElement(p);
		}
		getErforderLichePruefungen().setModel(model);
		DefaultListModel<Geprueft> modelGeprueft = new DefaultListModel<>();
		Collections.sort(item.getDurchgefuehrtePruefungen());
		for (Geprueft g : item.getDurchgefuehrtePruefungen()) {
			modelGeprueft.addElement(g);
		}
		getDurchgefuehrteList().setModel(modelGeprueft);
		getLblPrfungsAnzeigeLabel().setText(item.getNaestePruefungen().toString());
	}

	private void tragePruefungEin(PruefungAnzeigen pAnzeigen) {

		if (getErforderLichePruefungen().getModel().getSize() == 0) {
			JOptionPane.showMessageDialog(this, "Es sind keine notwendigen Prüfungen eingetragen!");
			return;
		}
		String ident = "";
		String name = "";
		if (pAnzeigen == null) {
			InlinePruefung answer = (InlinePruefung) JOptionPane.showInputDialog(this,
					"Welche Prüfung soll durchgeführt werden?", "Prüfung", JOptionPane.QUESTION_MESSAGE, null, item
							.getNoetigePruefungen().toArray(), null);
			if (answer != null) {
				ident = answer.getIdentifier();
				name = answer.getName();
			} else {
				return;
			}
		} else {
			ident = pAnzeigen.getIdentifer();
			name = pAnzeigen.getPruefungsName();
		}
		JXDatePicker datepicker = new JXDatePicker(new Date());
		int erg = JOptionPane.showConfirmDialog(this, datepicker, "Datum der " + name + " Prüfung?",
				JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
		if (erg != JOptionPane.YES_OPTION) {
			return;
		}
		String kommentar = JOptionPane.showInputDialog(this, "Kommentar zur Prüfung", name, JOptionPane.INFORMATION_MESSAGE);
		if (kommentar == null) {
			return;
		}
		Geprueft geprueft = new Geprueft();
		geprueft.setIndentifer(ident);
		geprueft.setGesprueftAM(datepicker.getDate());
		geprueft.setKommentart(kommentar);
		geprueft.setName(name);
		item.getDurchgefuehrtePruefungen().add(geprueft);
		changesFlag = true;
	}

	private void trageErforderlichePruefungEin() {

		List<OnlinePruefungItem> list = MainController.getInstance().getDataController().getAllePruefungen();
		if (list.size() == 0) {
			JOptionPane.showMessageDialog(this, "Unten Links mit dem Neu Brutton eine Prüfung erstellen!");
			return;
		}
		OnlinePruefungItem auswahl = (OnlinePruefungItem) JOptionPane.showInputDialog(this, "", "Erforderliche Eintragen",
				JOptionPane.QUESTION_MESSAGE, null, list.toArray(), null);
		if (auswahl != null) {
			InlinePruefung newPruefung = new InlinePruefung(auswahl.getBezeichner(), auswahl.getInterval(),
					auswahl.getKommentar());
			this.item.getNoetigePruefungen().add(newPruefung);
		}
		changesFlag = true;
	}

	private void editEingetragenePruefunden() {

		Geprueft p = getDurchgefuehrteList().getSelectedValue();
		if (p == null) {
			JOptionPane.showMessageDialog(this, "Bitte eine durchgeführte Prüfung wählen!");
			return;
		}
		// Datum anpassen
		JXDatePicker datepicker = new JXDatePicker(p.getGesprueftAM());
		int erg = JOptionPane.showConfirmDialog(this, datepicker, "Datum der Prüfung?", JOptionPane.YES_NO_OPTION,
				JOptionPane.QUESTION_MESSAGE);
		if (erg != JOptionPane.YES_OPTION) {
			return;
		}
		p.setGesprueftAM(datepicker.getDate());
		// kommentar ändern
		String kommentar = JOptionPane.showInputDialog(this, "Kommentar anpassen", p.getKommentar());
		if (kommentar == null) {
			return;
		}
		p.setKommentart(kommentar);
		changesFlag = true;
	}

	private void editiereErforderlichePruefung() {

		InlinePruefung p = getErforderLichePruefungen().getSelectedValue();
		if (p == null) {
			JOptionPane.showMessageDialog(this, "Bitte Prüfung wählen!");
			return;
		}
		String name = JOptionPane.showInputDialog(this, "Name eingeben", p.getName());
		if (name == null) {
			return;
		}
		p.setName(name);
		boolean zahlOK = false;
		while (!zahlOK) {
			String intervall = JOptionPane.showInputDialog(this, "Intervall in Monaten eingeben", p.getIntervall());
			if (intervall == null) {
				return;
			}
			try {
				int intervall2 = Math.abs(Integer.parseInt(intervall));
				p.setIntervall(intervall2);
				zahlOK = true;
			} catch (Exception e) {
			}
		}
		String kommentar = JOptionPane.showInputDialog(this, "Kommentar eingeben", p.getKommentar());
		if (kommentar == null) {
			return;
		}
		p.setKommentar(kommentar);
		changesFlag = true;
	}

	@Override
	public void wurdeGespeichert() {

		changesFlag = false;
		for (ChangeSupport c : compList) {
			c.setChangedFalse();
		}
	}

	private JLabel getLblSchreibrechte() {

		if (lblSchreibrechte == null) {
			lblSchreibrechte = new JLabel("Keine \u00C4nderungsrechte!");
			lblSchreibrechte.setForeground(Color.ORANGE);
			lblSchreibrechte.setFont(new Font("Tahoma", Font.PLAIN, 14));
			lblSchreibrechte.setVisible(false);
		}
		return lblSchreibrechte;
	}

	private JPanel getPanel_5() {

		if (panel_5 == null) {
			panel_5 = new JPanel();
			panel_5.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
			panel_5.add(getBtnSpeichern());
			panel_5.add(getBtnKopieErstellen());
			panel_5.add(getBtnSchlieen());
			panel_5.add(getBtnDrucken());
		}
		return panel_5;
	}

	@Override
	public String getTabBezeichner() {

		return getBezeichnerTextField().getText();
	}

	private JLabel getLblStatus() {

		if (lblStatus == null) {
			lblStatus = new JLabel("Einsatzstatus");
			lblStatus.setLabelFor(getEinsatzStatusComboBox());
		}
		return lblStatus;
	}

	private ComboBoxWithChangeSupport getEinsatzStatusComboBox() {

		if (einsatzStatusComboBox == null) {
			einsatzStatusComboBox = new ComboBoxWithChangeSupport();
			einsatzStatusComboBox.setModel(new DefaultComboBoxModel<String>(new String[] { "Einsatzbereit",
					"Bedingt Einsatzbereit", "Nicht Einsatzbereit" }));
		}
		return einsatzStatusComboBox;
	}

	private JScrollPane getScrollPane_1() {

		if (scrollPane_1 == null) {
			scrollPane_1 = new JScrollPane();
			scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
			scrollPane_1.setViewportView(getDurchgefuehrteList());
		}
		return scrollPane_1;
	}

	private JScrollPane getScrollPane_2() {

		if (scrollPane_2 == null) {
			scrollPane_2 = new JScrollPane();
			scrollPane_2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
			scrollPane_2.setViewportView(getErforderLichePruefungen());
		}
		return scrollPane_2;
	}

	@Override
	public JButton getBtnDrucken() {

		if (btnDrucken == null) {
			btnDrucken = new JButton("Drucken");
			btnDrucken.addActionListener(dataSetViewController);
		}
		return btnDrucken;
	}
}
